// 引入 fs 模块用于文件和目录操作
const fs = require('fs');
// 引入 path 模块用于处理路径
const path = require('path');

// 获取命令行参数（要删除的文件或文件夹名）
const target = process.argv[2];

// 如果没有传入命令行参数，给出提示并退出
if (!target) {
  console.log('请传入要删除的文件或文件夹名称');
  process.exit(1);
}

// 拼接目标路径（当前目录下的目标）
const targetPath = path.join(__dirname, target);

// 检查目标是文件还是文件夹
fs.stat(targetPath, (err, stats) => {
  if (err) {
    console.log(`目标 ${target} 不存在`);
    process.exit(1);
  }

  if (stats.isFile()) {
    // 是文件，直接删除
    fs.unlink(targetPath, (unlinkErr) => {
      if (unlinkErr) {
        console.log(`删除文件 ${target} 失败：`, unlinkErr);
      } else {
        console.log(`文件 ${target} 删除成功`);
      }
    });
  } else if (stats.isDirectory()) {
    // 是文件夹，递归删除
    deleteDirectory(targetPath);
  }
});

// 递归删除文件夹的函数
function deleteDirectory(dirPath) {
  // 读取文件夹内容
  fs.readdir(dirPath, (readErr, files) => {
    if (readErr) {
      console.log(`读取文件夹 ${dirPath} 失败：`, readErr);
      return;
    }

    // 依次处理文件夹中的每个文件/子文件夹
    const fileCount = files.length;
    let deletedCount = 0;

    if (fileCount === 0) {
      // 文件夹为空，直接删除
      fs.rmdir(dirPath, (rmdirErr) => {
        if (rmdirErr) {
          console.log(`删除空文件夹 ${dirPath} 失败：`, rmdirErr);
        } else {
          console.log(`空文件夹 ${path.basename(dirPath)} 删除成功`);
        }
      });
      return;
    }

    files.forEach((file) => {
      const filePath = path.join(dirPath, file);

      fs.stat(filePath, (statErr, fileStats) => {
        if (statErr) {
          console.log(`获取 ${filePath} 状态失败：`, statErr);
          return;
        }

        if (fileStats.isFile()) {
          // 是文件，删除
          fs.unlink(filePath, (unlinkErr) => {
            if (unlinkErr) {
              console.log(`删除文件 ${filePath} 失败：`, unlinkErr);
            }
            checkIfAllDeleted();
          });
        } else if (fileStats.isDirectory()) {
          // 是子文件夹，递归删除
          deleteDirectory(filePath);
          checkIfAllDeleted();
        }
      });
    });

    // 检查是否所有内容都已删除，若已删除则删除当前文件夹
    function checkIfAllDeleted() {
      deletedCount++;
      if (deletedCount === fileCount) {
        fs.rmdir(dirPath, (rmdirErr) => {
          if (rmdirErr) {
            console.log(`删除文件夹 ${dirPath} 失败：`, rmdirErr);
          } else {
            console.log(`文件夹 ${path.basename(dirPath)} 及其内容删除成功`);
          }
        });
      }
    }
  });
}